package main

import "fmt"

func main() {
	// 1. 变量声明（与PHP对比：PHP是弱类型，无需声明类型）
	var a int = 109
	b := 20 // 简短声明，只能在函数内使用
	fmt.Printf("a=%d, b=%d\n", a, b)

	// 2. 数组与切片（与PHP对比：PHP数组是有序映射，Go中数组长度固定，切片是动态数组）
	var arr [3]int = [3]int{1, 2, 3} // 数组，长度固定
	slice := []int{1, 2, 3}          // 切片，动态长度
	slice = append(slice, 4)         // 切片添加元素
	fmt.Printf("数组: %v, 长度: %d\n", arr, len(arr))
	fmt.Printf("切片: %v, 长度: %d, 容量: %d\n", slice, len(slice), cap(slice))

	// 3. Map（与PHP对比：类似PHP关联数组，但需要初始化）
	m := make(map[string]int) // 必须初始化才能使用
	m["one"] = 1
	m["two"] = 2
	fmt.Println("Map:", m)
	fmt.Println("Map中的one值:", m["one"])

	// 4. 结构体（与PHP对比：类似PHP的对象，但更轻量，没有方法默认继承）
	type Person struct {
		Name string
		Age  int
	}
	p := Person{Name: "张三", Age: 30}
	fmt.Printf("结构体: %v, 姓名: %s\n", p, p.Name)
}
